#include "TIMEGET.h"

TIMEGET_T* TIMEGET_t;


//************************************
// Method:    	CALCU_SAMA						//< SAMA运算函数
// Programmer:  lww
// Time:		2018/11/16
// Returns:   	bool							//< 成功：true；失败：false
// Parameter: 	Model_Base_t * arg				//< 模块参数结构体指针
// Parameter: 	float dt						//< 运算周期
// Parameter: 	bool * DI						//< 数字量输入值数组指针
// Parameter: 	bool * DO						//< 数字量输出值数组指针
// Parameter: 	bool * AI						//< 模拟量输入值数组指针
// Parameter: 	bool * AO						//< 模拟量输出值数组指针
//************************************
bool CALCU_SAMA(TIMEGET)(Model_Base_t* arg, float dt, bool* DI, bool* DO, float* AI, float* AO)
{
	/****************变量定义区开始**************/
	/*<<<<<定义输出变量>>>>>*/
	int Year;					//< 年份
	int Month;					//< 月份
	int Day;					//< 天
	int Week;					//< 周
	int Hour;					//< 小时
	int Minute;					//< 分钟
	int Second;					//< 秒
	int Millisecond;			//< 毫秒
	/*<<<<<<<<<<<<<<<<<<<<<<*/
	struct timespec ts;
	struct tm ptm_Now;			//< 当前时间
	/****************变量定义区结束**************/

	/********************************************/
	/**************算法功能实现开始**************/
	/********************************************/
	ts = RealTime_Get();					//< 获取当前的实时时间，存放在ts中
	ts.tv_sec += 28800;						//< duan0902 将世界标准时间转换成北京时间
	ptm_Now = *gmtime(&(ts.tv_sec));		//< 将这个秒数转化为存放年月日信息的结构体
	Year = ptm_Now.tm_year + 1900;			//< 年份是指1900年起距今的年数，因此需加上1900
	Month = ptm_Now.tm_mon + 1;				//< 月份是从0~11，因此加1
	Day = ptm_Now.tm_mday;					//< 日期范围是1~31
	if (ptm_Now.tm_wday == 0)				//< 星期的范围是0~6，分别表示"星期天","星期一","星期二","星期三","星期四","星期五","星期六"，因此当星期为0时，代表周日，赋值7
		Week = 7;
	else
		Week = ptm_Now.tm_wday;
	Hour = ptm_Now.tm_hour;						//< 小时数范围是0~23
	Minute = ptm_Now.tm_min;					//< 分钟数范围是0~59
	Second = ptm_Now.tm_sec;					//< 秒数范围是0~59
	Millisecond = (int)(ts.tv_nsec / 1000000);	//< 微妙数由ts变量转化而来
	/********************************************/
	/**************算法功能实现结束**************/
	/********************************************/	

	/****************运算结果输出**************/
	AO[0] = (float)Year;
	AO[1] = (float)Month;
	AO[2] = (float)Day;
	AO[3] = (float)Week;
	AO[4] = (float)Hour;
	AO[5] = (float)Minute;
	AO[6] = (float)Second;
	AO[7] = (float)Millisecond;
	/**************运算结果输出完毕************/
	return true;
}


